10 research outputs found

    Fine-grained and Accurate Source Code Differencing

    Get PDF
    update for oadoi on Nov 02 2018International audienceAt the heart of software evolution is a sequence of edit actions, called an "edit script", made to a source code file. Since software systems are stored version by version, the edit script has to be computed from these versions, which is known as a complex task. Existing approaches usually compute edit scripts at the text granularity with only "add line" and "delete line" actions. However, inferring syntactic changes from such an edit script is hard. Since moving code is a frequent action performed when editing code and it should also be taken into account. In this paper, we tackle these issues by introducing an algorithm computing edit scripts at the abstract syntax tree granularity including move actions. Our objective is to compute edit scripts that are short and close to the original developer intent. Our algorithm is implemented in a freely-available and extensible tool that has been intensively validated

    Raters’ reliability in clone benchmarks construction

    Get PDF
    International audienceCloned code often complicates code maintenance and evolution and must therefore be effectively detected. One of the biggest challenges for clone detectors is to reduce the amount of irrelevant clones they found, called false positives. Several benchmarks of true and false positive clones have been introduced, enabling tool developers to compare, assess and fine-tune their tools. Manual inspection of clone candidates is performed by raters that do not have expertise on the underlying code. This way of building benchmarks might be unreliable when considering context-dependent clones i.e., clones valid for a specific purpose. Our goal is to investigate the reliability of rater judgments about context-dependent clones. We randomly select about 600 clones from two projects and ask several raters, including experts of the projects, to manually classify these clones. We observe that judgments of non expert raters are not always repeatable. We also observe that they seldomly agree with each others and with the expert. Finally, we find that the project and the fact that a clone is a true or false positive might have an influence on the agreement between the expert and non experts. Therefore, using non experts to produce clone benchmarks could be unreliable

    EZ: Towards Efficient Asynchronous Protocol Gateway Construction

    Get PDF
    Part 2: Work-in-Progress PapersInternational audienceOver the past decade, we have witnessed the emergence of a bulk set of devices, from very different application domains interconnected via Internet to form what is commonly named Internet of Things (IoT). The IoT vision is grounded in the belief that all devices are able to interact seamlessly with each other anytime, anyplace, anywhere. However, devices communicate via a multitude of incompatible protocols, and consequently drastically slow down the IoT vision adoption. Gateways, that are able to translate one protocol to another, appear to be a key enabler of the future of IoT but present a cumbersome challenge for many developers. In this paper, we are providing a framework called EZ that enables to generate gateways for either C or Java platform without requiring from developers any substantial understanding of either relevant protocols or low-level network programming

    Relational Symbolic Execution

    Full text link
    Symbolic execution is a classical program analysis technique used to show that programs satisfy or violate given specifications. In this work we generalize symbolic execution to support program analysis for relational specifications in the form of relational properties - these are properties about two runs of two programs on related inputs, or about two executions of a single program on related inputs. Relational properties are useful to formalize notions in security and privacy, and to reason about program optimizations. We design a relational symbolic execution engine, named RelSym which supports interactive refutation, as well as proving of relational properties for programs written in a language with arrays and for-like loops

    Assesment of multiple inheritance implentation in static typing

    No full text
    Cette thèse traite de la compilation efficace des langages à objets en héritage multiple. La programmation objet est caractérisée par un mécanisme fondamental, emph{la liaison tardive} --- la méthode appelée dépend du type dynamique d'un paramètre distingué, le emph{receveur}. L'efficacité de ce mécanisme nécessite une implémentation adéquate qui est conditionnée par le schéma de compilation utilisé --- compilation séparée avec chargement dynamique, compilation globale, etc. Cependant la programmation par objets présente une apparente incompatibilité entre trois termes : l'héritage multiple, l'efficacité et l'owa --- en particulier, le chargement dynamique. Nous avons étudié les techniques d'implémentation compatibles avec l'héritage multiple couramment utilisées ainsi qu'une alternative prometteuse, le ph. Nous nous plaçons dans le cadre du typage statique, donc nos conclusions peuvent valoir pour des langages comme cpp, eiffel, java, csharp, etc. Différents schémas de compilation sont considérés, de l'owa à l'cwa. Ces techniques et ces schémas ont été mis en uvre dans le compilateur auto-gène du langage prm. L'influence sur l'efficacité de tous ces éléments a été testée dans un protocole expérimental rigoureux de méta-compilation et les tests ont été réalisés sur une variété de processeurs différents. Les résultats des ces expérimentations sont discutés et comparés aux évaluations a priori effectuées sur les techniques d'implémentation. Ils confirment aussi que le ph est une technique d'implémentation intéressante pour le sous-typage multiple à la java.His thesis is about efficient compilation of object oriented language with multiple inheritance.Object oriented programing is characterized by a main mechanism, emph{late binding} --- invoked method only depends on the dynamic type of one special parameter, the emph{receiver}.In order to be efficient this mechanism needs an implementation which depends on some compilation scheme --- separate compilation with dynamic loading, global compilation, etc.However object oriented programming present akin of incompatibility between three terms: multiple inheritance, efficiency and open world assumption --- especially with dynamic loading.In this thesis, we have studied common implementation techniques compatible with multiple inheritance and a promising alternative, perfect class hashing.The context of this study is static typing, our conclusion holds for languages like cpp, eiffel, java, csharp, etc.Different compilation schemes are considered, from open world assumption to closed world assumption.These techniques and schemes are implemented in the prm bootstraped compiler.Efficiency influence of all this artifacts has been tested with a rigorous meta-compilation experimental protocol and these tests have been performed on a variety of different processors.Results of these experiments are discuss and compared to an a priori evaluations of implementations techniquesThey mainly confirm perfect class hashing as an interesting implementation for multiple subtyping, a la java

    Coloring for Shared Object-Oriented Libraries

    No full text
    International audienceColoring is an implementation technique for multiple inheri- tance which is as efficient as single inheritance but only works in a global compilation or global linking framework. In this short paper we propose a variation on coloring that makes it compatible with shared libraries. Our proposal is usable for method invocation, attribute access, and subtype check, and respects five functional and efficiency requirements: constant time, quadratic space, short code, compatible with multiple inheritance, and incremental. We validate our proposal with theoretical evaluations, simulations and real executions which all show that the overhead for shared libraries remains small

    Eval begone!

    No full text
    corecore